﻿namespace ReadLineParser.Core;

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

/// <summary>
/// Класс, содержащий логику лексического анализа строки
/// </summary>
public static class LexicalAnalyzer
{
    /// <summary>
    /// Регулярное выражение для разбивки строки на токены 
    /// </summary>
    private const String SplitPattern = @"\w+\??|\s+|[^\s\w?]";

    /// <summary>
    /// Лексический анализ строки. Разбивает строку на токены
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static List<String> Analyze(String input)
    {
        var tokens = new List<String>();
        var matches = Regex.Matches(input, SplitPattern);

        foreach (Match match in matches)
        {
            var value = match.Value.Trim();

            if (!String.IsNullOrEmpty(value))
            {
                tokens.Add(value);
            }
        }

        return tokens;
    }
}